home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / amigamagazin / 02-93b / devices (folge 4) / condev0.mod < prev    next >
Text File  |  1992-05-09  |  6KB  |  272 lines

  1. MODULE ConDev0;
  2.  
  3. FROM Arts IMPORT
  4.     BreakPoint, kickVersion;(* Var m. Vers Nr des Betriebssystems *)
  5. FROM Console IMPORT
  6.     consoleName;
  7. FROM ConUnit IMPORT
  8.     conuCharmap, conuSnipmap, conuStandard;    (* OS 2 *)
  9. FROM DosL IMPORT
  10.     Delay;
  11. FROM ExecD IMPORT
  12.     IOStdReq, IOStdReqPtr, MsgPortPtr, read, write;
  13. FROM ExecL IMPORT
  14.     AbortIO, CheckIO, CloseDevice, CreateIORequest, CreateMsgPort,
  15.     DeleteIORequest, DeleteMsgPort, DoIO, GetMsg,
  16.     OpenDevice, ReplyMsg, SendIO, WaitIO, WaitPort;
  17. FROM IntuitionD IMPORT
  18.         IDCMPFlags, IDCMPFlagSet, WaTags, Window, WindowFlags,
  19.         WindowFlagSet, WindowPtr;
  20. FROM IntuitionL IMPORT
  21.     CloseWindow, ModifyIDCMP, OpenWindowTagList;
  22. FROM UtilityD IMPORT
  23.     tagDone;
  24. FROM SYSTEM IMPORT
  25.     ADR, ADDRESS, CAST, LONGSET, TAG;
  26. FROM Terminal IMPORT
  27.     WriteString;
  28.  
  29. CONST OS200 = 36;                 (* mindestens OS 2.0 *)
  30.       ConFlagDefault = LONGSET{};
  31.    (*
  32.       ConFlagNoDrawOnNewSize = 1;
  33.    *)
  34. VAR
  35.   ourWinPtr   : WindowPtr;
  36.   conWritePtr,
  37.   conReadPtr  : IOStdReqPtr;
  38.  
  39.  
  40. PROCEDURE IORequestAbbauen(VAR reqPtr : IOStdReqPtr);
  41.  
  42. BEGIN
  43.   IF reqPtr^.message.replyPort # NIL THEN
  44.      DeleteMsgPort(reqPtr^.message.replyPort);
  45.   END;
  46.   DeleteIORequest(reqPtr); (* OS 2 *)
  47. END IORequestAbbauen;
  48.  
  49.  
  50. PROCEDURE Aufraeumen;
  51.  
  52. BEGIN
  53.   IF conReadPtr # NIL THEN
  54.     IF ~ CheckIO(conReadPtr) THEN
  55.       AbortIO(conReadPtr);
  56.       WaitIO(conReadPtr);
  57.     END;
  58.     IORequestAbbauen(conReadPtr);
  59.   END;
  60.  
  61.   IF conWritePtr # NIL THEN
  62.     IF conWritePtr^.device # NIL THEN
  63.       CloseDevice(conWritePtr);
  64.     END;
  65.     IORequestAbbauen(conWritePtr);
  66.   END;
  67.  
  68.   IF ourWinPtr # NIL THEN
  69.     CloseWindow(ourWinPtr);
  70.   END;
  71. END Aufraeumen;
  72.  
  73.  
  74. PROCEDURE FensterAngelegt(VAR win : WindowPtr):BOOLEAN;
  75.  
  76. VAR  tagBuffer : ARRAY[0..19] OF LONGINT;
  77.  
  78. BEGIN
  79.    win := OpenWindowTagList             (* OS 2 *)
  80.             (NIL, TAG(tagBuffer,
  81.                     waLeft,      20,
  82.                     waTop,       20,
  83.                     waTitle,    ADR(" Con Dev 0 "),
  84.                     waWidth,    500,
  85.                     waHeight,   200,
  86.                     waMinWidth, 100,
  87.                     waMinHeight, 50,
  88.                     waFlags,  WindowFlagSet{simpleRefresh,
  89.                                             windowClose,
  90.                                             windowDepth,
  91.                                             windowDrag,
  92.                                             windowSizing},
  93.                   tagDone));
  94.   RETURN (win # NIL);
  95. END FensterAngelegt;
  96.  
  97.  
  98. PROCEDURE IORequestAngelegt(VAR conPtr : IOStdReqPtr):BOOLEAN;
  99.  
  100. VAR portPtr : MsgPortPtr;
  101.     done    : BOOLEAN;
  102.  
  103. BEGIN
  104.   done := FALSE;
  105.   portPtr := CreateMsgPort(); (* OS2 *)
  106.   IF portPtr # NIL THEN
  107.     conPtr := CreateIORequest(portPtr, SIZE(conPtr^)); (* OS 2*)
  108.     IF conPtr # NIL THEN
  109.       done := TRUE;
  110.     ELSE
  111.       DeleteMsgPort(portPtr);
  112.     END;
  113.   END;
  114.   RETURN done;
  115. END IORequestAngelegt;
  116.  
  117.  
  118. PROCEDURE ConsoleEingerichtet(VAR wrPtr,
  119.                                   rdPtr : IOStdReqPtr;
  120.                                   winPtr : WindowPtr) : BOOLEAN;
  121. VAR done : BOOLEAN;
  122.  
  123. BEGIN
  124.   done := FALSE;
  125.   IF IORequestAngelegt(wrPtr) THEN
  126.     wrPtr^.data := winPtr;
  127.     wrPtr^.length := SIZE(winPtr^);
  128.     OpenDevice(ADR(consoleName), conuStandard,
  129.                  wrPtr, ConFlagDefault);
  130.     IF (wrPtr^.error = 0) AND IORequestAngelegt(rdPtr) THEN
  131.       rdPtr^.unit := wrPtr^.unit;
  132.       rdPtr^.device := wrPtr^.device;
  133.       done := TRUE;
  134.     ELSE
  135.       Aufraeumen;
  136.     END;
  137.   END;
  138.   RETURN done;
  139. END ConsoleEingerichtet;
  140.  
  141.  
  142. PROCEDURE ConWriteStr(conPtr : IOStdReqPtr;
  143.                       str    : ADDRESS);
  144. BEGIN
  145.   conPtr^.data := str;
  146.   conPtr^.length := -1;
  147.   conPtr^.command := write;
  148.   DoIO(conPtr);
  149. END ConWriteStr;
  150.  
  151.  
  152. PROCEDURE ConWriteBuf(conPtr : IOStdReqPtr;
  153.                       bufPtr     : ADDRESS;
  154.                       laenge     : INTEGER);
  155. BEGIN
  156.   conPtr^.data := bufPtr;
  157.   conPtr^.length := laenge;
  158.   conPtr^.command := write;
  159.   DoIO(conPtr);
  160. END ConWriteBuf;
  161.  
  162.  
  163. PROCEDURE ConReadSync(conPtr : IOStdReqPtr;
  164.                   bufPtr : ADDRESS;
  165.                   laenge : INTEGER) : INTEGER;
  166. BEGIN
  167.   conPtr^.data := bufPtr;
  168.   conPtr^.length := laenge;
  169.   conPtr^.command := read;
  170.   SendIO(conPtr);
  171.   WaitIO(conPtr);
  172.   RETURN conPtr^.actual;
  173. END ConReadSync;
  174.  
  175.  
  176. PROCEDURE SchreibTest;
  177.  
  178. VAR zaehler : INTEGER;
  179.  
  180. BEGIN
  181.   ConWriteStr(conWritePtr,
  182.               ADR("\033[1;31mHallo Console! "));
  183. (*                 ^   ^^ ^ ^
  184.                    |   || | 0x6D = Terminator
  185.                    |   || rot
  186.                    |   |bold
  187.                    |   0x5B \
  188.                    ESC      / Ersatz fuer CSI
  189. *)
  190.   FOR zaehler := 0 TO 99 DO
  191.     ConWriteStr(conWritePtr, (* bold + Farbe bleibt *)
  192.                 ADR("Hallo Console! "));
  193.   END;
  194. END SchreibTest;
  195.  
  196.  
  197. PROCEDURE LeseTest;
  198.  
  199. VAR buffer : ARRAY[0..9] OF CHAR;
  200.     laenge : INTEGER;
  201.  
  202. BEGIN
  203.   ConWriteStr(conWritePtr,
  204.             ADR("\n\033[3;32m** Geben Sie 1 Zeichen ein ** "));
  205. (*                  ^  ^^ ^ ^
  206.                     |  || | 0x6D = Terminator
  207.                     |  || gruen
  208.                     |  |italic
  209.                     |  0x5B
  210.                     ESC
  211. *)
  212.   laenge := ConReadSync(conReadPtr, ADR(buffer), SIZE(buffer));
  213.   IF buffer[0] = 233C THEN
  214.     buffer[0] := "@"
  215.   END;
  216.   ConWriteBuf(conWritePtr, ADR(buffer), laenge);
  217. END LeseTest;
  218.  
  219.  
  220. PROCEDURE LeseRawEvent;
  221.  
  222. VAR buffer : ARRAY[0..999] OF CHAR;
  223.     index,
  224.     laenge : INTEGER;
  225.  
  226. BEGIN
  227.  
  228.   ConWriteStr(conWritePtr,
  229.   ADR("\033[0;31m\n\n\033[1{cl;scl;key;qual;x;y;sec;mic|\n"));
  230.  
  231.   Delay(100);
  232.  
  233.   laenge := ConReadSync(conReadPtr, ADR(buffer), SIZE(buffer));
  234.  
  235.   FOR index := 0 TO (laenge - 1) DO
  236.     IF buffer[index] = 233C THEN
  237.       buffer[index] := 012C;
  238.     END;
  239.   END;
  240.   ConWriteBuf(conWritePtr, ADR(buffer), laenge);
  241. END LeseRawEvent;
  242.  
  243.  
  244. PROCEDURE IDCMPCloseClickAbholen(winPtr : WindowPtr);
  245.  
  246. BEGIN
  247.   ModifyIDCMP(winPtr, IDCMPFlagSet{closeWindow});
  248.   WaitPort(winPtr^.userPort);
  249.   ReplyMsg(GetMsg(winPtr^.userPort));
  250. END IDCMPCloseClickAbholen;
  251.  
  252.  
  253. BEGIN
  254.   IF kickVersion >= OS200 THEN
  255.     IF FensterAngelegt(ourWinPtr) THEN
  256.       IF ConsoleEingerichtet(conWritePtr, conReadPtr, ourWinPtr) THEN
  257.  
  258.         SchreibTest;
  259.         LeseTest;
  260.         LeseRawEvent;
  261.  
  262.         IDCMPCloseClickAbholen(ourWinPtr);
  263.  
  264.         Aufraeumen;
  265.       END;
  266.     END;
  267.   ELSE
  268.     WriteString("Programm setzt OS 2 voraus\n");
  269.   END;
  270. END ConDev0.
  271.  
  272.